package org.lanyu.springainovel.common.utils;

/**
 * 任务ID生成工具类
 * 用于生成规范的任务唯一标识
 */
public class TaskIdGenerator {
    
    /**
     * 生成大纲生成任务ID
     * 格式：{bookId}_outline
     * 
     * @param bookId 书籍ID
     * @return 任务ID
     */
    public static String generateOutlineTaskId(Long bookId) {
        return bookId + "_outline";
    }
    
    /**
     * 生成细纲生成任务ID
     * 格式：{bookId}_suboutline
     * 
     * @param bookId 书籍ID
     * @return 任务ID
     */
    public static String generateSuboutlineTaskId(Long bookId) {
        return bookId + "_suboutline";
    }
    
    /**
     * 生成章节生成任务ID
     * 格式：{bookId}_chapter_{chapterNumber}
     * 
     * @param bookId 书籍ID
     * @param chapterNumber 章节号
     * @return 任务ID
     */
    public static String generateChapterTaskId(Long bookId, Integer chapterNumber) {
        return bookId + "_chapter_" + chapterNumber;
    }
    
    /**
     * 生成章节内容生成任务ID
     * 格式：{bookId}_content_{chapterNumber}
     * 
     * @param bookId 书籍ID
     * @param chapterNumber 章节号
     * @return 任务ID
     */
    public static String generateContentTaskId(Long bookId, Integer chapterNumber) {
        return bookId + "_content_" + chapterNumber;
    }
    
    /**
     * 生成书籍分析任务ID
     * 格式：{bookId}_analysis
     * 
     * @param bookId 书籍ID
     * @return 任务ID
     */
    public static String generateAnalysisTaskId(Long bookId) {
        return bookId + "_analysis";
    }
    
    /**
     * 从任务ID中提取书籍ID
     * 
     * @param taskId 任务ID
     * @return 书籍ID，如果格式不正确则返回null
     */
    public static Long extractBookId(String taskId) {
        if (taskId == null || taskId.isEmpty()) {
            return null;
        }
        
        String[] parts = taskId.split("_");
        if (parts.length >= 2) {
            try {
                return Long.parseLong(parts[0]);
            } catch (NumberFormatException e) {
                return null;
            }
        }
        
        return null;
    }
    
    /**
     * 从章节任务ID中提取章节号
     * 
     * @param taskId 任务ID
     * @return 章节号，如果格式不正确则返回null
     */
    public static Integer extractChapterNumber(String taskId) {
        if (taskId == null || !taskId.contains("_chapter_")) {
            return null;
        }
        
        String[] parts = taskId.split("_chapter_");
        if (parts.length == 2) {
            try {
                return Integer.parseInt(parts[1]);
            } catch (NumberFormatException e) {
                return null;
            }
        }
        
        return null;
    }
    
    /**
     * 判断是否为大纲任务ID
     * 
     * @param taskId 任务ID
     * @return 是否为大纲任务ID
     */
    public static boolean isOutlineTaskId(String taskId) {
        return taskId != null && taskId.endsWith("_outline");
    }
    
    /**
     * 判断是否为细纲任务ID
     * 
     * @param taskId 任务ID
     * @return 是否为细纲任务ID
     */
    public static boolean isSuboutlineTaskId(String taskId) {
        return taskId != null && taskId.endsWith("_suboutline");
    }
    
    /**
     * 判断是否为章节任务ID
     * 
     * @param taskId 任务ID
     * @return 是否为章节任务ID
     */
    public static boolean isChapterTaskId(String taskId) {
        return taskId != null && taskId.contains("_chapter_");
    }
    
    /**
     * 判断是否为章节内容任务ID
     * 
     * @param taskId 任务ID
     * @return 是否为章节内容任务ID
     */
    public static boolean isContentTaskId(String taskId) {
        return taskId != null && taskId.contains("_content_");
    }
    
    /**
     * 判断是否为分析任务ID
     * 
     * @param taskId 任务ID
     * @return 是否为分析任务ID
     */
    public static boolean isAnalysisTaskId(String taskId) {
        return taskId != null && taskId.endsWith("_analysis");
    }
}